
/**
 * \file Monstre.h
 * \brief Module gérant les monstres
 * \author Carrillon Sovanna, Brogard Pierre
 * \version 1.0
 * \date juin 2011
 */


#ifndef MONSTRE_H
#define MONSTRE_H

#include <string.h>
#include <stdlib.h>

#include "Direction.h"
#include "Position.h"


/**
  * \enum EtatMonstre
  * \brief un monstre peut prendre 3 états différents : "balade", "excité" et "mort"
  */
enum eEtatMonstre {balade, excite, mort} ;
typedef enum eEtatMonstre EtatMonstre;

/**
  * \enum Categorie
  * \brief un monstre peut appartenir à différentes catégories
  */
enum eCategorie {soldat, chien}; /* catégories à compléter... */
typedef enum eCategorie Categorie;

/**
  * \struct Monstre
  * \brief se compose d'une catégorie, d'une position, d'une direction, d'un nombre de coeurs, d'une vitesse et d'un état
  */
typedef struct
    {
    Categorie categorie;
    Position position;
    Direction direction;
    int coeurs;
    int vitesse; /* on ne s'en occupera pas pour l'instant, pas le temps... */
    EtatMonstre etat;
    }
Monstre;




void monInit(Monstre* p_monstre, Categorie catego, int x, int y);
Monstre* monCree();


/* Précondition : case destination accessible, sinon, il va y aller et peut-être rester coincé */
void monTeleporte(Monstre* p_monstre, int x, int y); /* simple téléportation, ne change pas la direction du monstre */
void monDeplace(Monstre* p_monstre);


const Position* monGetConstPosition(const Monstre* p_monstre);
int monGetPosX(const Monstre* p_monstre);
int monGetPosY(const Monstre* p_monstre);
Position monGetPosition(const Monstre* p_monstre);


const Direction monGetConstDirection(const Monstre* p_monstre);

const Categorie monGetConstCategorie(const Monstre* p_monstre);





int monGetNbCoeurs(const Monstre* p_monstre);

void monChangeNbCoeurs(Monstre* p_monstre, int modificateur);



const EtatMonstre monGetEtat(const Monstre* p_monstre);

void monSetEtat(Monstre* p_monstre, EtatMonstre nouvel_etat);



Position monDeplAleatoire(Monstre* p_monstre);

Position monDeplExcite(Monstre* p_monstre, Position* p_pos);


/* manque test de régression */

#endif /* MONSTRE_H */
